英語で読む

次の方法で共有


.NET 9.0.100 から .NET 10.0.100 以降の Razor の破壊的変更

このドキュメントでは、.NET 9 の一般リリース (.NET SDK バージョン 9.0.100) から .NET 10 一般リリース (.NET SDK バージョン 10.0.100) までの Razor の既知の破壊的変更を示します。

プリプロセッサ ディレクティブの解析の中断

VS 17.13p1 および .NET 9.0.200 で導入されました

Razor ファイル内の C# セクションを理解するための新しい字句モードが導入されました。これにより、C# がネイティブに字句化される方法との互換性が向上しました。 ただし、これは、以前は一貫して機能していなかった C# 前処理ディレクティブに対する Razor コンパイラの理解に重大な変更をもたらします。 ディレクティブは、Razor ファイル内の行の先頭から開始する必要があります (その前に空白文字のみを使用できます)。 さらに、プリプロセッサ ブロック #if 非アクティブと見なされたときに、無効になっているセクションが Razor コンパイラによって適切に無効になりました。

プリプロセッサ ブロックは、行の先頭から開始する必要があります

razor
@{ #if DEBUG /* Previously allowed, now triggers RZ1043 */ }
<div>test</div>
@{ #endif /* Previously allowed, now triggers RZ1043 */ }

修正するには、ディレクティブを新しい行に移動します。 ディレクティブの前には空白のみを使用できます。

razor
@{
#if DEBUG /* This is allowed */
}
<div>test</div>
@{
    #endif /* This is allowed */
}

無効なブロックが Razor コンパイラで正しく見なされるようになりました

無効なブロックは Razor コンパイラによって完全に無効と見なされ、ブロックを理解しようとはなっていません。 前の中断と組み合わせると、 #else#elif、または #endif が行の先頭になかった場合 (剰余空白)、ファイルの大きなセクションが古いバージョンの Razor コンパイラよりも無効と見なされることを意味します。 ここで発生する可能性のある中断を診断するために、Razor コンパイラは無効なテキスト セクションをスキャンして、プリプロセッサ ディレクティブが正しく配置されていない可能性があるかどうかを確認し、検出された場合は警告を報告します。

razor
@{
#if false
}

This area is now properly considered disabled by the razor compiler, and no attempt to understand it as either C# or HTML is made. This
can cause changes to how the output is rendered from previous versions of the Razor compiler.

@{ #else
    In previous versions of the Razor compiler, this directive would have been picked up. It is no longer picked up because it is not at
    the start of a line. The Razor compiler will report a warning, RZ1044, to help diagnose any potential breaks in this area.
}

@{
#endif
}